{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from selenium import webdriver\n",
    "from selenium.webdriver.support import expected_conditions as EC\n",
    "from selenium.webdriver.support.ui import WebDriverWait\n",
    "from selenium.webdriver.common.by import By\n",
    "from bs4 import BeautifulSoup\n",
    "\n",
    "driver=webdriver.Chrome()\n",
    "driver.get('https://search.51job.com/list/010000,000000,0000,00,9,99,+,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=')\n",
    "\n",
    "wait= WebDriverWait(driver,10)#等待10s，没用出来就报错"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "search_btn=driver.find_element_by_css_selector(#根据selector找到对应的元素（selector是网页检查右键的copyselector）\n",
    "   '#keywordInput'\n",
    ")\n",
    "search_btn.send_keys('数据分析')#关键字的传输"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "confirm_btn1=wait.until(#显式等待，直到元素被点击\n",
    " EC.element_to_be_clickable(\n",
    " (By.CSS_SELECTOR,'#search_btn')\n",
    " )\n",
    ")\n",
    "confirm_btn1.click()#点击"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正在爬取第0页信息\n",
      "正在爬取第1页信息\n",
      "正在爬取第2页信息\n",
      "正在爬取第3页信息\n",
      "正在爬取第4页信息\n"
     ]
    }
   ],
   "source": [
    "data=[]\n",
    "details_links=[]\n",
    "for j in range(5):\n",
    "    print('正在爬取第'+str(j)+'页信息')\n",
    "    #确认是否有\"下一页\"的按钮\n",
    "confirm_btn=wait.until(#显式等待，直到元素被点击\n",
    " EC.element_to_be_clickable(\n",
    " (By.CSS_SELECTOR,'body > div:nth-child(4) > div.j_result > div > div.leftbox > div:nth-child(4) > div.j_page')\n",
    " )\n",
    ")\n",
    "confirm_btn.click()#点击"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "soup = BeautifulSoup(driver.page_source,'lxml')\n",
    "#soup_findall=soup.select('body > div:nth-child(4) > div.j_result > div > div.leftbox > div:nth-child(4) > div.j_joblist>div')\n",
    "soup_findall=soup.find('div',class_=\"j_joblist\").find_all('div',class_=\"e\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                           职位名                            公司名  \\\n",
      "0                      数据技术研发岗                 华风气象传媒集团有限责任公司   \n",
      "1                 8K数控编程/大数据分析                   北京联科数信科技有限公司   \n",
      "2                8k土木工程师/大数据分析                   北京政星企业管理有限公司   \n",
      "3                      数据分析工程师                     系统集成有限责任公司   \n",
      "4                     数据分析师-北京                   北京集智数字科技有限公司   \n",
      "5                        数据分析师                 北京中天孔明科技股份有限公司   \n",
      "6           数据分析专员（应届硕士解决北京户口）                 北京华奥汽车服务股份有限公司   \n",
      "7                 数据分析专员（人力方向）                       爱慕股份有限公司   \n",
      "8                    产品运营数据分析师                完美世界（北京）总部/完美时空   \n",
      "9               数据分析/机器学习算法实习生                     北京小唱科技有限公司   \n",
      "10                数据分析师-tky工程部               北京华路时代信息技术股份有限公司   \n",
      "11                     数据分析管理师               北京天威诚信电子商务服务有限公司   \n",
      "12                    数据分析师8.7                 北京大德盛业投资管理有限公司   \n",
      "13                       数据分析师               有谦软联（北京）信息技术有限公司   \n",
      "14            2021年校招-数据分析岗-北京                     首创证券有限责任公司   \n",
      "15                   数据分析师（北京）                         云计算分公司   \n",
      "16                     数据分析师助理               嘉诺恒盛（北京）教育科技有限公司   \n",
      "17                       数据分析师                   中信百信银行股份有限公司   \n",
      "18                        数据分析                 中邮信息科技（北京）有限公司   \n",
      "19                       数据分析员     中国铁道科学研究院集团有限公司铁道建筑研究所下属企业   \n",
      "20           Java开发工程师（数据分析方向）                   北京华热科技发展有限公司   \n",
      "21                      电商数据分析               艾可爱尔（中国）销售服务有限公司   \n",
      "22              AI数据分析师-AI研发中心                        中国电信研究院   \n",
      "23  数据分析师（上海邮电设计咨询研究院有限公司）（北京）                   中国通信服务股份有限公司   \n",
      "24               数据分析 — 内容策略方向                           字节跳动   \n",
      "25                        数据分析                           美团点评   \n",
      "26    初级大数据分析师(GY1zwg)(J12183)                 北京东方国信科技股份有限公司   \n",
      "27                  EEG数据分析工程师                    中国科学院自动化研究所   \n",
      "28                 数据分析实习生（北京）                 北京神州祥龙投资管理有限公司   \n",
      "29                    运营数据分析助理                   北京动向体育发展有限公司   \n",
      "30                  新媒体运营与数据分析                   北京泽平科技有限责任公司   \n",
      "31               1数据分析师 双休 非销售                 北京盛业华宝教育科技有限公司   \n",
      "32                     高级数据分析师          FICO（费埃哲信息技术（北京）有限公司）   \n",
      "33                      数据分析专家                 佑恩睿德（成都）科技有限公司   \n",
      "34                   数据分析师（双休）                        萌牙家电动牙刷   \n",
      "35           公关部_舆情与数据分析(高级)专员               百度在线网络技术（北京）有限公司   \n",
      "36             用户行为研究部_数据分析工程师                百度（中国）有限公司东莞分公司   \n",
      "37                     大数据分析人员                       鸿讯物流有限公司   \n",
      "38                    金融外汇数据分析               嘉诺富邦（北京）电子商务有限公司   \n",
      "39                     金融数据分析师                 北京领行国际企业管理有限公司   \n",
      "40                   数据分析师（广州）                    奇虎360科技有限公司   \n",
      "41           研发科学家_工业数据分析与人工智能  西门子（中国）有限公司Siemens Ltd. China   \n",
      "42                       数据分析师                   上海如鼎信息科技有限公司   \n",
      "43                      金融数据分析             华壹信融投资管理（北京）有限责任公司   \n",
      "44                      数据分析经理                 北京融汇天诚投资管理有限公司   \n",
      "45                   数据分析业务负责人               北京安德信业信息咨询有限责任公司   \n",
      "46                     金融数据分析师                 韦尔森特（北京）科技有限公司   \n",
      "47                    业务数据分析专员                华北利星行机械（北京）有限公司   \n",
      "48           excel数据分析专员、VBA开发                     北京连盈科技有限公司   \n",
      "49          数据分析专家(J200310016)                             滴滴   \n",
      "50                     助理兼数据分析             国科恒泰（北京）医疗科技股份有限公司   \n",
      "\n",
      "                                    工作地点            薪资       发布时间  \n",
      "0         [北京  |  3-4年经验  |  本科  |  招1人]      [2-3万/月]  [08-08发布]  \n",
      "1      [北京-丰台区  |  无需经验  |  大专  |  招若干人]    [0.8-1万/月]  [08-08发布]  \n",
      "2      [北京-丰台区  |  无需经验  |  大专  |  招若干人]    [0.8-1万/月]  [08-08发布]  \n",
      "3                    [北京  |  本科  |  招3人]            []  [08-08发布]  \n",
      "4                   [北京  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "5                   [北京  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "6        [北京  |  在校生/应届生  |  硕士  |  招1人]    [0.8-1万/月]  [08-08发布]  \n",
      "7                   [北京  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "8       [北京-朝阳区  |  2年经验  |  本科  |  招1人]    [1-1.5万/月]  [08-08发布]  \n",
      "9   [北京-朝阳区  |  在校生/应届生  |  硕士  |  招若干人]      [270元/天]  [08-08发布]  \n",
      "10          [北京  |  2年经验  |  本科  |  招2人]    [1-1.5万/月]  [08-08发布]  \n",
      "11      [北京-海淀区  |  1年经验  |  本科  |  招1人]  [0.8-1.2万/月]  [08-08发布]  \n",
      "12            [北京-朝阳区  |  无需经验  |  招若干人]    [1.5-2万/月]  [08-08发布]  \n",
      "13    [北京-丰台区  |  3-4年经验  |  本科  |  招1人]    [1-1.8万/月]  [08-08发布]  \n",
      "14                   [北京  |  本科  |  招1人]            []  [08-08发布]  \n",
      "15                  [北京  |  硕士  |  招若干人]            []  [08-08发布]  \n",
      "16      [北京-朝阳区  |  无需经验  |  大专  |  招4人]  [0.8-1.5万/月]  [08-08发布]  \n",
      "17                   [北京  |  本科  |  招1人]            []  [08-08发布]  \n",
      "18                  [北京  |  硕士  |  招20人]            []  [08-08发布]  \n",
      "19          [北京  |  1年经验  |  本科  |  招2人]      [6-8千/月]  [08-08发布]  \n",
      "20                  [北京  |  硕士  |  招若干人]            []  [08-08发布]  \n",
      "21         [北京  |  2年经验  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "22                   [北京  |  硕士  |  招1人]            []  [08-08发布]  \n",
      "23                   [北京  |  本科  |  招7人]            []  [08-08发布]  \n",
      "24        [北京  |  3-4年经验  |  本科  |  招1人]    [1-2.5万/月]  [08-08发布]  \n",
      "25           [北京-朝阳区  |  5-7年经验  |  招1人]      [4-5万/月]  [08-08发布]  \n",
      "26       [北京  |  在校生/应届生  |  本科  |  招5人]  [0.6-1.2万/月]  [08-08发布]  \n",
      "27         [北京  |  1年经验  |  本科  |  招若干人]  [1.5-2.5万/月]  [08-08发布]  \n",
      "28                  [北京  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "29                  [北京  |  本科  |  招若干人]            []  [08-08发布]  \n",
      "30      [北京-海淀区  |  2年经验  |  本科  |  招1人]    [1-1.5万/月]  [08-08发布]  \n",
      "31                      [北京-朝阳区  |  招5人]  [0.8-1.5万/月]  [08-08发布]  \n",
      "32    [北京-西城区  |  3-4年经验  |  本科  |  招2人]    [20-30万/年]  [08-08发布]  \n",
      "33     [北京-海淀区  |  无需经验  |  本科  |  招若干人]      [3-4万/月]  [08-08发布]  \n",
      "34        [异地招聘  |  无需经验  |  本科  |  招5人]  [1.2-2.5万/月]  [08-08发布]  \n",
      "35                      [北京-海淀区  |  招1人]    [1.5-3万/月]  [08-08发布]  \n",
      "36          [北京  |  1年经验  |  本科  |  招2人]    [1.5-3万/月]  [08-08发布]  \n",
      "37   [北京-丰台区  |  3-4年经验  |  本科  |  招10人]    [16-24万/年]  [08-08发布]  \n",
      "38             [北京-朝阳区  |  无需经验  |  招8人]  [0.6-1.5万/月]  [08-08发布]  \n",
      "39      [北京-东城区  |  1年经验  |  本科  |  招4人]    [1-1.5万/月]  [08-08发布]  \n",
      "40        [北京  |  3-4年经验  |  本科  |  招2人]    [2.5-3万/月]  [08-08发布]  \n",
      "41         [北京  |  2年经验  |  硕士  |  招若干人]            []  [08-08发布]  \n",
      "42      [北京-东城区  |  无需经验  |  大专  |  招3人]    [0.8-1万/月]  [08-08发布]  \n",
      "43     [北京-朝阳区  |  无需经验  |  大专  |  招若干人]    [1-1.5万/月]  [08-08发布]  \n",
      "44    [北京-朝阳区  |  3-4年经验  |  大专  |  招3人]    [1-1.5万/月]  [08-08发布]  \n",
      "45   [北京-海淀区  |  5-7年经验  |  本科  |  招若干人]    [3.5-5万/月]  [08-08发布]  \n",
      "46     [北京-通州区  |  1年经验  |  大专  |  招19人]  [1.8-2.6万/月]  [08-08发布]  \n",
      "47      [北京-通州区  |  2年经验  |  本科  |  招1人]      [7-9千/月]  [08-08发布]  \n",
      "48   [北京-海淀区  |  3-4年经验  |  本科  |  招若干人]      [1-2万/月]  [08-08发布]  \n",
      "49    [北京-海淀区  |  3-4年经验  |  本科  |  招1人]    [1.5-2万/月]  [08-08发布]  \n",
      "50        [北京  |  3-4年经验  |  本科  |  招1人]  [0.8-1.2万/月]  [08-08发布]  \n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "for i in soup_findall[:]:\n",
    "    dic={}\n",
    "    job_title=i.find('span',class_=\"jname at\").text#职位名\n",
    "    details_link=i.find('p',class_=\"el\")#详情链接\n",
    "    company_name=i.find('a',class_=\"cname at\").text#公司名\n",
    "    working_place=i.find('span',class_=\"d at\")#工作地点\n",
    "    salary=i.find('span',class_=\"sal\")#薪资\n",
    "    release_time=i.find('span',class_=\"time\")#发布时间\n",
    "    details_links.append(details_link)\n",
    "    dic={'职位名':job_title,'公司名':company_name,'工作地点':working_place,'薪资':salary,'发布时间':release_time}\n",
    "    data.append(dic)\n",
    "\n",
    "#点击下一页\n",
    "confirm_btn.click()\n",
    "data=pd.DataFrame(data)\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
